///工厂构造函数 普通构造函数是没有返回值的，而factory构造函数需要一个返回值
///
/// dart中只能有一个未命名的构造函数，对应命名构造函数来说，名字不能重复
///
/// 工厂构造函数，没有权利访问this
class Animal {
  final String name;

  static final Map<String, Animal> _studentMap = <String, Animal>{};

  factory Animal(String name) {
    return _studentMap.putIfAbsent(name, () => Animal._newStudent(name));
  }

  factory Animal.fromJson(Map<String, Object> json) {
    return Animal(json['name'].toString());
  }

  Animal._newStudent(this.name);
}

